簡體   English   中英

使用VBA打開Excel文件並復制表格

[英]Opening an excel file & copying sheets using VBA

我需要將幾個Excel工作表(“ Y”,“ X”)從一個文件復制到另一個Excel文件(稱為Z-與我使用VBA的文件相同)中的同一工作表。 我的局限性是第一個excel文件(帶有X,Y)的名稱和路徑正在更改,因此我試圖使用“ as String”和Application.GetOpenFilename()命令編寫更通用的名稱,但是我m收到錯誤。

嘗試分成2個不同的子

Sub BrowseForFile()
    Dim sFileName As String
    sFileName = Application.GetOpenFilename(, , "open the file: " )

    If sFileName = "false" Then Exit Sub
    MsgBox sFileName
    Workbooks.Open (sFileName)
    Workbooks(sFileName).Sheets("X").Activate
    Stop
  1. 運行時錯誤9
  2. 找不到文件(我認為是1004)

如果用戶按下“ 取消”按鈕,則GetOpenFilename函數將返回布爾False而不是字符串"false"因此您需要測試If sFileName = False Then其聲明為Variant

如果打開工作簿,請始終將其引用到變量,以便您可以輕松地使用該變量訪問工作簿

Dim OpenedWb As Workbook
Set OpenedWb = Workbooks.Open(sFileName)

然后,您可以使用變量Wb來引用您打開的工作簿

OpenedWb.Worksheets("X").Activate

請注意,使用.Select.Activate是一種不好的做法,應避免使用如何避免在Excel VBA中使用Select )。 而是使用另一個引用來引用您的工作簿。

Dim ws As Worksheet
Set ws = OpenedWb.Worksheets("X")

並訪問諸如ws.Range("A1").Value類的范圍。


Sub BrowseForFile()
    Dim sFileName As Variant 'needs to be variant because cancel returns a boolean False
    sFileName = Application.GetOpenFilename(, , "open the file: " )

    If sFileName = False Then Exit Sub

    MsgBox sFileName

    Dim OpenedWb As Workbook
    Set OpenedWb = Workbooks.Open(sFileName)

    Dim ws As Worksheet
    Set ws = OpenedWb.Worksheets("X")

    MsgBox ws.Range("A1").Value 'output the value of `A1` in worksheet `X` of workbook `sFileName`
End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM