VBA代码不适用于所有Excel工作表

时间:2017-12-11 10:21:02

标签: excel vba ms-access access-vba

环境:

  • 在Access中使用VBA
  • 使用DoCmd.TransferSpreadsheet acExport
  • 在一个新的Excel文件中导出四个表作为四个表
  • 使用访问中的vba代码修改导出的文件

我想做什么:

  • excel文件中有四张纸。在所有填充列的每个工作表中,都应该应用“textToColumn”函数。

问题:

  • 使第一行加粗适用于每张纸。 “textToColumn”函数仅适用于第一张表。

我的代码:

Dim xlApp As Object
Dim xlSheet As Object

Set xlApp = CreateObject("Excel.Application")
Set xlSheet = xlApp.Workbooks.Open("C:\Users\jfrick\Documents\BPM Access\Revenue Evolution GFS.xlsx")

With xlApp
        .Application.Cells.Select
        .Application.Selection.ClearFormats
        .Application.Rows("1:1").Select
        .Application.Selection.Font.Bold = True
        .Application.Cells.Select
        .Application.Selection.RowHeight = 12.75
        .Application.Selection.Columns.AutoFit

        .Application.Range("E:E").TextToColumns
        .Application.Range("F:F").TextToColumns             
        .Application.ActiveWorkbook.Save
        .Application.ActiveWorkbook.Close
        .Quit
End With

我也尝试使用以下代码段,但这也只会更改第一张表中的列:

Dim ws As Worksheet

For Each ws In xlApp.Worksheets 'also tried xlSheet.Worksheets but same result
    ws.Application.Range("E:E").TextToColumns
    ws.Application.Range("F:F").TextToColumns
Next ws

- >如何在每张表格中的列上应用“textToColumn”功能?

1 个答案:

答案 0 :(得分:1)

你几乎就在那里,只是一个简单的误解:

改变这个:

For Each ws In xlApp.Worksheets 'also tried xlSheet.Worksheets but same result
    ws.Application.Range("E:E").TextToColumns
    ws.Application.Range("F:F").TextToColumns
Next ws

对此:

For Each ws In xlApp.Worksheets
    ws.Range("E:E").TextToColumns
    ws.Range("F:F").TextToColumns
Next ws

由于您在尝试时引用ws.Application.Range,因此您在应用程序对象上调用.Range而不是工作表对象,而该工作表对象是指活动工作表,而不是{ {1}}