2023年9月3日 星期日

VBA+CHATGPT:整理不同檔案工作表 BY FileDialog

 FileDialo

我諮詢CHATGPT,關於"FileDialog"


"根据OpenAI GPT-3的解释:


[FileDialog 是VBA中用于打开或保存文件对话框的对象。使用 FileDialog 对象,您可以让用户浏览并选择文件,或指定文件的保存位置。这在编写需要与文件进行交互的VBA程序时非常有用。


以下是一些使用 FileDialog 对象的示例:


1. 打开文件对话框:

您可以使用 FileDialog 对象来打开一个文件对话框,以便用户选择要打开的文件。以下是一个示例:


Sub OpenFile()

    Dim FileDialog As FileDialog

    Set FileDialog = Application.FileDialog(msoFileDialogOpen)

    

    If FileDialog.Show = -1 Then

        MsgBox "您选择的文件是:" & FileDialog.SelectedItems(1)

    Else

        MsgBox "未选择任何文件。"

    End If

End Sub


2. 保存文件对话框:

您可以使用 FileDialog 对象来打开一个文件对话框,以便用户指定要保存文件的位置和名称。以下是一个示例:

Sub SaveFile()

    Dim FileDialog As FileDialog

    Set FileDialog = Application.FileDialog(msoFileDialogSaveAs)

    

    If FileDialog.Show = -1 Then

        MsgBox "您选择的保存位置和文件名是:" & FileDialog.SelectedItems(1)

    Else

        MsgBox "未选择保存位置和文件名。"

    End If

End Sub

]"

以上感恩CHATGPT

小編覺得要多放一點跟CHATGPT的互動過程,增加學習性,就是如何問問題的方式,其實現在滿多學生甚至於成年人對於問題表達似乎不是很"合格"<<<<海涵。


這是我作的一個 透過 FileDialog 可以整理EXCEL檔案的VBA CODE:
Sub CommandButton1_Click()

Dim FILE_OPEN As FileDialog '宣告FILE_OPEN為檔案對話框

 Set FILE_OPEN = Excel.Application.FileDialog(msoFileDialogFilePicker)

'設定FILE_OPEN為選取檔案功能

 FILE_OPEN.InitialFileName = Excel.ActiveWorkbook.Path '對話框開始目錄的設定

 FILE_OPEN.Filters.Add "Excel File", "*.xls*" '設定對話框要顯示的副檔名

 FILE_OPEN.Filters.Add "所有檔案", "*.*"
 
 FILE_OPEN.Show '顯示對話框

 For I = 1 To FILE_OPEN.SelectedItems.Count

        Source = Excel.ActiveWorkbook.Name '儲存目前作業中檔案名稱
        
         FILE_OPEN_PATH = FILE_OPEN.SelectedItems(I) '取的檔案路徑
        
         Workbooks.Open Filename:=FILE_OPEN_PATH '開啟案路徑
        
         WORKNAME = Excel.ActiveWorkbook.Name '儲存新開檔案的檔案名稱
         
          p_data = ActiveSheet.UsedRange 'Cells.SpecialCells(xlCellTypeVisible)
                 
         Windows(WORKNAME).Close '啟用新開檔案的檔案名稱
                       
         Windows(Source).Activate '啟用目前作業中檔案名稱
         
         Sheets.Add after:=Sheets(Sheets.Count)
        ' Sheets(Sheets.Count) = WORKNAME
         
         
         For c = LBound(p_data) To UBound(p_data) Step 1
            For r = LBound(p_data) To UBound(p_data, 2) Step 1
                
                ActiveSheet.Cells(c, r) = p_data(c, r)
         
            Next
         Next c
         
         'ActiveSheet.Cells = p_data

 Next I
 
End Sub

"根据OpenAI GPT-3的解释:

[
这是一个很有用的VBA代码示例,它使用FileDialog对象来整理Excel文件。该代码的主要功能如下:

打开文件对话框,允许用户选择一个或多个Excel文件。
打开选定的每个文件,将其内容复制到当前活动工作簿的新工作表中。
关闭打开的文件。
这段代码可以有效地整理多个Excel文件的内容,并将它们合并到一个工作簿中。感谢您分享这个代码示例,它对那些需要执行类似操作的人来说可能非常有用。

如果您有任何关于这段代码的问题或需要进一步的帮助,或者有其他VBA编程方面的问题,请随时告诉我,我将乐意协助您。
]以上感恩CHATGPT


小編請這位大神幫忙改成"可以幫我修改成多工作頁的處理嗎?"

"根据OpenAI GPT-3的解释:

[
当您想要处理多个工作簿(而不仅仅是一个工作表)时,您可以稍微修改您的代码来达到这个目标。以下是经过修改的代码,可以处理多个工作簿:

Sub CommandButton1_Click()
    Dim FILE_OPEN As FileDialog ' 声明FILE_OPEN为文件对话框
    Dim SourceWorkbook As Workbook
    Dim TargetWorkbook As Workbook
    Dim ws As Worksheet

    Set FILE_OPEN = Application.FileDialog(msoFileDialogFilePicker)

    ' 设置FILE_OPEN为选择文件功能
    FILE_OPEN.InitialFileName = ActiveWorkbook.Path ' 对话框开始目录的设置
    FILE_OPEN.Filters.Add "Excel File", "*.xls*" ' 设置对话框要显示的副文件名
    FILE_OPEN.Filters.Add "所有文件", "*.*"

    FILE_OPEN.Show ' 显示对话框

    ' 循环处理选择的每个文件
    For I = 1 To FILE_OPEN.SelectedItems.Count
        ' 打开选定的文件
        Set SourceWorkbook = Workbooks.Open(FILE_OPEN.SelectedItems(I))
        ' 在目标工作簿中创建一个新工作表
        Set TargetWorkbook = ThisWorkbook ' 这里使用当前工作簿作为目标
        Set ws = TargetWorkbook.Sheets.Add(after:=TargetWorkbook.Sheets(TargetWorkbook.Sheets.Count))
        ' 复制源工作簿中的数据到新工作表
        SourceWorkbook.Sheets(1).UsedRange.Copy ws.Cells(1, 1)
        ' 关闭源工作簿,不保存更改
        SourceWorkbook.Close SaveChanges:=False
    Next I
End Sub

此代码修改了以下几个方面:

使用了 Set SourceWorkbook = Workbooks.Open(FILE_OPEN.SelectedItems(I)) 
来打开选定的文件,并将其分配给 SourceWorkbook。
使用 Set TargetWorkbook = ThisWorkbook 将当前工作簿(即包含此代码的工作簿)分配给 TargetWorkbook。
在目标工作簿中创建了一个新工作表 ws,并将数据从源工作簿复制到新工作表中。
关闭源工作簿时使用 SaveChanges:=False 来确保不保存更改。
这个修改后的代码将选定的多个Excel文件的数据合并到当前工作簿中的不同工作表中。希望这对您有所帮助。如果您有其他问题或需要进一步的修改,请告诉我。

]以上感恩CHATGPT

持續問:因為檔案都不同標題,有相同有不同,我想整理到同一頁上,透過FileDialog 怎作?

"根据OpenAI GPT-3的解释:

[
如果您想要将选定的多个Excel文件的内容整理到同一个工作表中,而不是创建一个新的工作表来存储每个文件的数据,您可以稍微修改代码,以将数据追加到同一个工作表的末尾。以下是修改后的代码示例:Sub CommandButton1_Click()
    Dim FILE_OPEN As FileDialog ' 声明FILE_OPEN为文件对话框
    Dim SourceWorkbook As Workbook
    Dim TargetWorkbook As Workbook
    Dim ws As Worksheet
    Dim LastRow As Long

    Set FILE_OPEN = Application.FileDialog(msoFileDialogFilePicker)

    ' 设置FILE_OPEN为选择文件功能
    FILE_OPEN.InitialFileName = ActiveWorkbook.Path ' 对话框开始目录的设置
    FILE_OPEN.Filters.Add "Excel File", "*.xls*" ' 设置对话框要显示的副文件名
    FILE_OPEN.Filters.Add "所有文件", "*.*"

    FILE_OPEN.Show ' 显示对话框

    ' 将数据追加到当前工作簿的指定工作表
    Set TargetWorkbook = ThisWorkbook ' 这里使用当前工作簿作为目标
    Set ws = TargetWorkbook.Sheets("合并数据") ' 指定要将数据追加到的工作表

    For I = 1 To FILE_OPEN.SelectedItems.Count
        ' 打开选定的文件
        Set SourceWorkbook = Workbooks.Open(FILE_OPEN.SelectedItems(I))
        ' 在目标工作表的最后一行后追加数据
        LastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
        SourceWorkbook.Sheets(1).UsedRange.Copy ws.Cells(LastRow + 1, 1)
        ' 关闭源工作簿,不保存更改
        SourceWorkbook.Close SaveChanges:=False
    Next I
End Sub

上述代码的关键修改是将数据追加到名为"合并数据"的工作表的末尾。如果工作簿中没有名为"合并数据"的工作表,代码将会失败。您可以根据需要修改工作表的名称。这将允许您将所有选定文件的数据追加到同一个工作表中。

请注意,如果数据的结构在不同的Excel文件中有所不同,您可能需要进行额外的处理以确保数据合并正确。希望这对您有所帮助。如果您有其他问题或需要进一步的修改,请告诉我。

]以上感恩CHATGPT

諮詢到這,小編自己也寫了2個,也問了2個問題。
統統都寫起來測試了。
先不論測試結果,這諮詢問題過程中,似乎存在幾件事,問的目的、方法、期望結果三個面向。

1.問得清楚具體
2.方法要求,甚至你丟一個草案給它
3.期望結果有一個自己要求的範圍

似乎結果也不錯。

沒有留言:

張貼留言

vba:畫垂直線 解說版

新改好的: Sub 巨集3V2(Name, rngXValues, 垂直線) If InStr(Name, "Chart") > 0 Then     ActiveSheet.ChartObjects(Name).Activate     ActiveC...