Option Explicit
Sub DleteColumns()
Dim objWorkbook As Workbook
Dim i As Integer
Dim keepColumn As Boolean
Dim currentColumn As Integer
Dim columnHeading As String
Dim ws As Worksheet
'This is temporary for testing this one below
Application.DisplayAlerts = False
currentColumn = 1
'open the workbook with data
DoEvents
Set objWorkbook = Workbooks.Open(_
"H:\C_Files\xls\a_C_Track_20171101.xls")
'Do a pause
Application.Wait (Now + TimeValue("0:00:10"))
ThisWorkbook.Activate
Set ws = ActiveSheet
'Stop
'read the data from the first columns
For i = 1 To 1
currentColumn = 1
While currentColumn <= ActiveSheet.UsedRange.Columns.Count
columnHeading = ActiveSheet.UsedRange.Cells(1, currentColumn).Value
'CHECK WHETHER TO KEEP THE COLUMN
keepColumn = False
If columnHeading = "#reason" Then keepColumn = True
If columnHeading = "first_name" Then keepColumn = True
If columnHeading = "last_name" Then keepColumn = True
If columnHeading = "employer_name" Then keepColumn = True
If columnHeadimg = "city" Then keepColumn = True
If columnHeading = "state" Then keepColumn = True
If columnHeading = "date_of_birth" Then keepColumn = True
If columnHeading = "ssn" Then keepColumn = True
If keepColumn Then
currentColumn = currentColumn + 1
Else
ActiveSheet.Columns(currentColumn).Delete
End If
'LASTLY AN ESCAPE IN CASE THE SHEET HAS NO COLUMNS LEFT
If (ActiveSheet.UsedRange.Address = "$A$1") And
(ActiveSheet.Range("$A$1").text = "") Then Exit Sub
Wend
Next i
Stop
'ActiveWorkbook.Save
'objWorkbook.Close
ActiveWorkbook.Close SaveChanges:=True
End Sub
-2
A
答えて
0
私の知る限り、あなたの唯一の本当の問題は、現在アクティブなシートに変更を適用している、ThisWorkbook.Activate
声明による、ということですマクロを含むブックにあります。その単一の行を削除するだけで、あなたが望むようにあなたのマクロはうまくいくでしょう。
ただし、定数参照先はActiveSheet
です。次のコードは、それがあなたのws
オブジェクトを使用するように変更します。コードはActiveSheet
に設定されていますが(特に私の意見ではまだよくありませんが、ActiveSheet
はブックが最後に保存されたときにどちらのシートがアクティブになっているかのように)、私はコメントに2つの設定方法より適切かもしれません。
Option Explicit
Sub DleteColumns()
Dim objWorkbook As Workbook
Dim i As Integer
Dim keepColumn As Boolean
Dim columnHeading As String
Dim ws As Worksheet
Application.DisplayAlerts = False
'open the workbook with data
Set objWorkbook = Workbooks.Open("H:\C_Files\xls\a_C_Track_20171101.xls")
Set ws = ActiveSheet
'Better than the above line would be something like
'Set ws = objWorkbook.Worksheets("Sheet_I_want_to_process")
'or maybe
'Set ws = objWorkbook.Worksheets(1)
With ws
'Loop through each column in the sheet, working from right to left
For i = .UsedRange.Columns(.UsedRange.Columns.Count).Column To 1 Step -1
columnHeading = .Cells(1, i).Value
'CHECK WHETHER TO KEEP THE COLUMN
keepColumn = False
If columnHeading = "#reason" Then keepColumn = True
If columnHeading = "first_name" Then keepColumn = True
If columnHeading = "last_name" Then keepColumn = True
If columnHeading = "employer_name" Then keepColumn = True
'Ensure you type your variable names correctly - "columnHeadimg" in your
'code would have stopped your program running
If columnHeading = "city" Then keepColumn = True
If columnHeading = "state" Then keepColumn = True
If columnHeading = "date_of_birth" Then keepColumn = True
If columnHeading = "ssn" Then keepColumn = True
If Not keepColumn Then
.Columns(i).Delete
End If
Next
'Only save if there is something left
If .UsedRange.Address <> "$A$1" Or .Range("$A$1").Text <> "" Then
objWorkbook.Close SaveChanges:=True
End If
End With
Application.DisplayAlerts = False
End Sub
+0
非常にありがとう! – Frederica
関連する問題
- 1. プログラムの先頭に戻る
- 2. ファイルの先頭に戻る?
- 3. リストビューの先頭に戻るarrayadapterのデータを更新した後
- 4. iScroll先頭に戻る
- 5. PHP:一種の 'break'を使ってループの先頭に戻る?
- 6. Pepper:インタラクションがない場合、プログラムの先頭に戻ります。
- 7. UIScrollViewがバウンスする先頭に戻る
- 8. jQueryを使ってウィンドウの先頭に戻す
- 9. ユーザーがページの先頭に戻るとメニューがドロップされない
- 10. DictReaderの先頭に戻るには?
- 11. AS3ベクターリストの先頭に戻るには?
- 12. 先頭へ戻るボタンとフッタ(配置)
- 13. Cのforループの先頭に戻る
- 14. ループのif文の先頭に戻る
- 15. REPLの行の先頭に戻る
- 16. エラーの後にwhileループの先頭に戻るには
- 17. Aurelia typescriptページの先頭に戻る
- 18. IE8は、前のページの先頭に戻ってジャンプしていない私は前に(だけのJSで)
- 19. 文の条件が満たされていない場合にコードの先頭に戻る
- 20. 角度$リソース、その後戻っていないデータは
- 21. ノードを追加した後にリンクリストの先頭にポインタを戻していますか?
- 22. マスターページとAjaxを使用してフォームを送信した後にページの先頭に戻る
- 23. リロードページタブ/ウィンドウに戻ってからx分だけ戻った後
- 24. AspNet MVCは私に戻ってログインに戻ります。デフォルトビューをレンダリングした後
- 25. 先頭へ戻るフッターのボタン
- 26. 戻り値がネストされていない戻り値
- 27. 戻るボタンを使ってCrossWalkのXWalkViewに戻ったり、それを無効にするには?
- 28. Python - 先頭へ戻るループwhileループ
- 29. 先頭へ戻るフラグメントから
- 30. Python/Django - 値がループの後に戻ってきています
あなたがしたいこと、試したこと、起こることを期待すること、実際に起こることを説明する必要があります。コードダンプ自体は役に立ちません。 –
あなたの質問は何ですか?最初にこの記事をチェックしてください:https://stackoverflow.com/help/how-to-ask – hod
大変ありがとう、私はvbaを新しくしています。私はワークブックを開いて約50列を削除しようとしていますが、vba内のものを除いて、コードがワークブックを開くときに開くと、それが開き、セットに戻ります(開いている場所)私はそこに停止を置く、それは開いた過去を取得しますが、削除を実行しません。私は解決策のために多くのサイトを見てきましたが、シフトキーに問題がありましたが、シフトキーを使用していません....ありがとう、あなたの応答とあなたの助けが大歓迎です。 – Frederica