![]() |
|
|
|
#1
|
||||
|
||||
|
I'll be away for a few days, so I thought I'd post the following Excel macro as a potential solution:
Code:
Sub UpdatePrices()
Application.ScreenUpdating = False
Dim StrList As String, DataSet As String, StrData As String, StrItem As String
Dim i As Long, j As Long, LRow As Long
StrList = ","
With ThisWorkbook
DataSet = .Path & "\ProductCatalog.txt"
If Dir(DataSet) <> "" Then
With .Sheets("Master")
LRow = .Range("A" & .Rows.Count).End(xlUp).Row
.Range("K6:K" & LRow).ClearContents
For i = 6 To LRow
If Trim(.Range("C" & i).Value) <> "" Then StrList = StrList & .Range("C" & i).Value & ","
Next
i = UBound(Split(StrList, ",")) - 1
Open DataSet For Input As #1
Do Until EOF(1)
Line Input #1, StrData
StrItem = Split(StrData, " ")(0)
If InStr(StrList, "," & StrItem & ",") <> 0 Then
j = UBound(Split(Split(StrList, StrItem)(0), ",")) + 5
.Range("K" & j).Value = Trim(Split(StrData, "$")(1))
i = i - 1
End If
If i = 0 Then Exit Do
Loop
Close #1
End With
End If
End With
If i > 0 Then
MsgBox "Done. However, " & i & " item(s) could not be matched.", vbExclamation
Else
MsgBox "Done.", vbInformation
End If
Application.ScreenUpdating = True
End Sub
As coded, the macro: • assumes the source file is a PDF saved as text in the same folder as the Excel workbook, with the name 'ProductCatalog.txt'. • updates the retail prices on the 'Master' sheet. For efficiency reasons, no comparison between new & old prices is done - they're simply updated regardless. • all existing retail prices are cleared before updating. • uses any 'sale' prices that might be on offer. If you want to update a different column, change the column K references to suit. If you want to keep values that don't get updated, delete/comment-out the line: [code].Range("K6:K" & LRow).ClearContents['code] If you want to use regular prices instead of sale prices, change: Code:
.Range("K" & j).Value = Trim(Split(StrData, "$")(1))
Code:
.Range("K" & j).Value = Trim(Split(StrData, "$")(UBound(Split(StrData, "$"))))
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
|
#2
|
|||
|
|||
|
Paul, my apologies for the extended delay. I got caught up playing catch up after the holidays. I hope you had a good holiday and got to enjoy a vacation!
You are correct in saying that the LCB# is the only reliable data to match. The way you have your most recent macro setup should work from what I am trying to accomplishment. I am mainly just concerned with the actual price of the product at that time. If there is a sale it should take that price. If not, i should check to make sure the retail price is in fact accurate. As a small follow up, would it be possible to highlight if there is actually a sales price? I believe this is a simple addition to the script though. So I have the ProductCatalog.txt file located in the same folder as the .xlsm file I am running the macro from and I get the following error: "Run-time error '9': Subscript out of range" Clicking on Debug points to the line: "StrItem = Split(StrData, " ")(0)" In regard to your Note, the items marked as "SLO" where there LCB# is located is special pricing cases that will have to be ignored as there pricing comes directly from the liquor reps. These will just have to be updated manually. Is there a way that is "SLO" is the LCB# just to skip over that field instead of blanking out the retail price? As always, thank you very much for your efforts with this. I think we are getting really close to what I am looking for! |
|
#3
|
||||
|
||||
|
Quote:
Code:
.Range("K6:K" & LRow).ClearContents
Code:
With .Range("K6:K" & LRow)
.ClearContents
.Font.ColorIndex = xlColorIndexAutomatic
End With
Code:
.Range("K" & j).Value = Trim(Split(StrData, "$")(1))
Code:
With .Range("K" & j)
.Value = Trim(Split(StrData, "$")(1))
If Trim(Split(StrData, "$")(UBound(Split(StrData, "$")))) <> Trim(Split(StrData, "$")(1)) Then .Font.ColorIndex = vbRed
End With
Quote:
Code:
On Error Resume Next Code:
Do Until EOF(1) Quote:
Code:
.Range("K6:K" & LRow).ClearContents
Since it's possible to obtain Adobe Acrobat Pro 8 as a free download (http://www.techspot.com/downloads/46...at-8-free.html - note the serial# mentioned there) and that program can be automated via VBA, it would be possible to write a macro that automates IE to download the file, then automates Acrobat to export the data to a text file that the macro I've already provided can process. Quite possibly, re-coding would allow the export to text to be skipped too. Acrobat Pro installs as a COM add-in. For automation code, see, for example: https://www.msofficeforums.com/excel...html#post35801
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
|
| Tags |
| adobe, conversion, pdf |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
[Excel 2007] Building Power Point Slides from data in an Excel Table
|
bremen22 | Excel Programming | 1 | 08-07-2013 11:01 AM |
| Paste special an Excel range into Outlook as an Excel Worksheet | charlesh3 | Excel Programming | 3 | 02-04-2013 04:33 PM |
Excel 2011 can't open old Excel 98 or Excel X files
|
FLJohnson | Excel | 8 | 05-09-2012 11:26 PM |
| Excel 2007 custom ribbon not showing in Excel 2010 | Paulzak | Excel | 2 | 02-17-2012 06:35 PM |
saving data in excel 2010 from excel 2003
|
johnkcalg | Excel | 1 | 02-06-2012 07:33 PM |