2016-03-11 84 views
1

我試圖使用通配符文件名作爲變量,因此我可以使用它來複制並執行一些公式。然後我想要將所有的公式拼合起來。用於公式和複製的變量中的文件名

它看起來像這樣:

這第一部分作品(第一件事就是打開一個從一個單元格公式通配符文件和第二隻分配文件名沒有路徑變量PROD - 將鼠標懸停在變量督促給人正是它應該)

Dim wbProd As Workbook 
Windows("SB.xlsm").Activate 
Set wbProd = Workbooks.Open(FileNAME:=Sheets("refs").Range("B48").Value) 
Dim Prod As String 
Windows("SB.xlsm").Activate 
Prod = Worksheets("refs").Range("B49").Value 

Windows("Weekly.xlsx").Activate 
With Workbooks(" & Prod & ").Sheets("Report 1") 
.Range("A2:BG10", .Range("A2:BG10").End(xlDown)).Copy Workbooks("WeeklyData X.xlsx").ActiveSheet.Range("A2") 
End With 

Windows("WeeklyData X.xlsx").Activate 
Dim ws As Worksheet 
Set ws = ThisWorkbook.Sheets("Report 1") 
ws.UsedRange.Value = ws.UsedRange.Value 

第一部分複製出現錯誤:使用工作簿(「&產品&」).Sheets(「Report 1」)。當我在變量中使用這種複製方法而不使用文件名時,它可以工作,並且當我使用變量文件名來執行Vlookups時,它也可以工作。我不知道什麼是不在這裏工作的原因。 另外,如果你有更好的方式來平整所有的公式和preseve格式(約會的日期),這將是偉大的。

感謝,

回答

3

速戰速決是創建一個工作簿變量(Dim myWB as Workbook),

然後做Set myWB = Workbooks(Prod)。然後只需要做With myWB.Sheets("Sheet1")

問題在於Excel需要在工作表名稱中使用引號,因此您的書的字面上理解爲標題爲& Prod &。所以,爲了保持目前的想法,您只需要爲每個報價添加一個額外的報價:With Workbooks("" & Prod & "").Sheets("Report 1")

我個人建議設置一個工作簿變量,但是可以工作!

編輯: @drLecter - 非常歡迎!嘗試設置包含引號的公式時,您還會遇到「雙引號」問題。 IE工作表公式=Vlookup("myText",A1:D1,2,False)將在VBA中變爲

Cells(1,1).Formula = "=Vlookup(""myText"",A1:D1,2,False)"

正如你所看到的,如果我沒有使用雙引號,VBA將停止在

Cells(1,1).Formula = "=Vlookup(

+1

這就是它。該死,我擺弄了好幾個小時。謝謝你,小夥伴。並感謝一邊的學校教育。永遠感激。 – drLecter

+0

@drLecter - 非常歡迎!我用更多的信息更新了我的答案,僅供參考。 – BruceWayne

+1

感謝隊友。 :) – drLecter

0

使用dir()讀取配方!

Microsoft Documentation link - dir() function

- 返回表示文件,目錄或文件夾指定的圖案或文件屬性,或驅動器的卷標匹配的名稱的字符串。

只是適應這樣的事::

Sub LoopThroughFiles() 
    Dim MyObj As Object, MySource As Object, file As Variant 
    file = Dir("c:\testfolder\") 
    While (file <> "") 
     If InStr(file, "test") > 0 Then 
     MsgBox "found " & file 
     Exit Sub 
     End If 
    file = Dir 
    Wend 
End Sub