Board logo

標題: [發問] 揀選名稱中有【均值】的檔案之語法。 [打印本頁]

作者: Airman    時間: 2019-6-1 04:57     標題: 揀選名稱中有【均值】的檔案之語法。

本帖最後由 Airman 於 2019-6-1 05:01 編輯

[attach]30749[/attach]
均值主檔的程式碼和其它主檔的程式碼的差別只在︰
均值為有執行 列12~列15的程式碼
其它為不執行 列12~列15的程式碼

在多種檔案名稱中~
當名稱中有均值二個文字的檔案,其[B1:BK1]必須移除,再重新由B1往右填入1~49的數字。
EX︰今日總表(均值排序)-1_9-(基準日:2019-05-31);空數總覽(均值排序)-(基準日:2019-05-31);機數總覽(均值排序)-(基準日:2019-05-31)
當名稱中沒有均值二個文字的檔案,其[B1:AX1]都是數字,只要更改數字格式即可。
EX︰今日總表(合數排序)-1_9-(基準日:2019-05-31);空數總覽(生肖排序)-(基準日:2019-05-31);機數總覽(八卦排序)-(基準日:2019-05-31)
所以必須以均值主檔來執行名稱中有均值的.csv檔案更改為.xls檔案;再以其它主檔來執行名稱中無均值的.csv檔案更改為.xls檔案。

因為每一期都必須由882個檔案中,挑出147個名稱中有均值的檔案,分開執行檔案類型更改~覺得很麻煩~
所以希望能將均值和其它二個主檔合併,而列12~列15的程式碼可以揀選名稱中有均值的檔案才執行。
請問︰上述二個主檔合併後,而列12~列15的程式碼可以揀選名稱中有均值的檔案才執行的需求的之語法?
懇請各位先進惠予賜教!謝謝!
作者: Airman    時間: 2019-6-1 07:15

本帖最後由 Airman 於 2019-6-1 07:19 編輯

回復 1# Airman
1#提問說明作廢~~

[attach]30750[/attach]
提問說明重新整理如下 :
當名稱中有均值二個連續文字之檔案,則執行列12~列15的程式碼,否則略過不執行

請問︰均值主檔的程式碼要如何修編 ?

以上 懇請各位先進惠予賜教!謝謝!
作者: Airman    時間: 2019-6-1 07:35

補充 :
列12~列15的程式碼~
            [B1:BK1].Clear
            For j = 1 To 49         '均值
                Cells(1, j + 1) = j
            Next
作者: Scott090    時間: 2019-6-2 09:00

本帖最後由 Scott090 於 2019-6-2 09:07 編輯

回復 3# Airman

      試試這個語法
      if instr("???均值???", "均值")<>0 then .......
作者: Airman    時間: 2019-6-2 09:13

回復 4# Scott090
Scott090大大 :您好!
不知小弟有沒有會錯意!?
是這樣嗎?

           If Debug.Print UBound(Split("???均值均值???", "均值")) Then GoTo 101
            [B1:BK1].Clear
            For j = 1 To 49         '均值
                Cells(1, j + 1) = j
            Next
101:

語法不對^^"
作者: 准提部林    時間: 2019-6-2 09:52

Sub TEST()
Dim P$, F$, A$
P = ThisWorkbook.Path
Application.ScreenUpdating = False
Do
  If F = "" Then F = Dir(P & "\*.csv") Else F = Dir
  If F = "" Then Exit Do
  A = Replace(Replace(F, "基準日:", ""), ".csv", "")
  With Workbooks.Open(P & "\" & F)
       If InStr(A, "均值") Then
          [B1:BK1].Clear
           For j = 1 To 49: Cells(1, j + 1) = j: Next
       End If
       If InStr(A, "總表") Then [A:A].NumberFormatLocal = "yyyy/mm/dd"  '總表-日期-固定長度較好檢視
       [B1:AX1].NumberFormatLocal = "00"
       With [B1:AX1].Font: .Bold = True: .Size = 14: .ColorIndex = 5: End With
       With [A:AX]
           .Font.Name = "Arial"
           .HorizontalAlignment = xlCenter
           .EntireColumn.AutoFit
       End With
       [B2].Select
       With ActiveWindow: .FreezePanes = True: .Zoom = 75: End With
       .SaveAs Filename:=P & "\" & A & ".xls", FileFormat:=xlNormal, CreateBackup:=False
       .Close 0
  End With
  Kill P & "\" & F
Loop
End Sub


================
作者: Scott090    時間: 2019-6-2 09:59

回復 5# Airman


    不知哪一個是版主需要要的。
     1. 有"均值" 二字就執行:
          if instr("???均值???", "均值") <>0 then
               [B1:BK1].Clear
            For j = 1 To 49         '均值
                Cells(1, j + 1) = j
            Next
        end if
101:

      2.  有連續的 "均值" 才會執行:
         if UBound(Split("???均值均值???", "均值"))>1 Then
            [B1:BK1].Clear
            For j = 1 To 49         '均值
                Cells(1, j + 1) = j
            Next
        end if
101:

     假如二者都不是 ,請忽略不用理會
作者: 准提部林    時間: 2019-6-2 10:17

回復 5# Airman


1) path 是vba專用字, 儘量不用來設變數
2) 問題應將規則說明, 不要讓人只從程式碼中去判讀
作者: Airman    時間: 2019-6-2 11:16

本帖最後由 Airman 於 2019-6-2 11:18 編輯

回復 7# Scott090
Scott090大大 :
測試報告:   
咖啡色字=新增的貴解程式碼
藍色字=選擇性執行的程式碼
需求=檔案名稱有均值時,則執行藍色字的程式碼;如果檔案名稱內沒有均值時,就跳過藍色字的程式碼(即不執行)。
目前以下列的程式碼=無論檔案名稱內沒有或沒有均值的文字,全部都有執行藍色字的程式碼。
請問 : 要如何修正?
謝謝您^^

    Sub Ex()
        Dim Path As String, A As String, j%
        Path = ThisWorkbook.Path  '請修改為你的資料夾
        A = Dir(Path & "\*.CSV")
        Do While A <> ""
            Name Path & "\" & A As Path & "\" & Replace(A, "基準日:", "")
            A = Replace(A, "基準日:", "")
             With Workbooks.Open(Path & "\" & A)
                 .SaveAs Filename:=Path & "\" & Replace(A, ".csv", ".xls"), FileFormat:=xlNormal
           
          If UBound(Split("???均值均值???", "均值")) > 1 Then
            [B1:BK1].Clear
            For j = 1 To 49         '均值
                Cells(1, j + 1) = j
            Next

          End If

                With [B1:AX1]
                    .Font.Bold = True
                    .Font.Size = 14
                    .NumberFormatLocal = "00"
                    .Font.ColorIndex = 5
                End With
                    
                    Columns("A:AX").Font.Name = "Arial"
                    Columns("A:AX").HorizontalAlignment = xlCenter
                    Columns("A:AX").EntireColumn.AutoFit
                    [B2].Select
                    ActiveWindow.FreezePanes = True
                    ActiveWindow.Zoom = 75
                 
                 .Close True
             End With
            Kill Path & "\" & A
            A = Dir
        Loop
    End Sub
作者: Airman    時間: 2019-6-2 11:36

回復 8# 准提部林
准大 ;
不好意思~以為這樣會比較簡明^^"
謝謝您的建議!

規則如1樓的說明,但好像太冗長^^
作者: Airman    時間: 2019-6-2 11:39

本帖最後由 Airman 於 2019-6-2 11:41 編輯

回復 7# Scott090
回復 9# Airman
修正筆誤~
目前以下列的程式碼=無論檔案名稱內沒有均值的文字,全部都有執行藍色字的程式碼。
作者: Airman    時間: 2019-6-2 12:36

回復 6# 准提部林
准大 :
測試結果 :  [attach]30758[/attach]
因為工作表名稱變成復原Sheet1(不是=檔案名稱),自行試了半天~無法處理^^"
敬請賜正~謝謝您^^
作者: Scott090    時間: 2019-6-2 13:08

回復 11# Airman

      承9#:
      猜測 檔名 變數 A 內的字串型態可能是:
       沒有"均值"二字:                     "?????????????"  或
       僅有"均值"二字沒有再重複: "?????均值?????"
       假如是這樣,請用:   
      If  instr(A,"均值")<>0  Then
            [B1:BK1].Clear
            For j = 1 To 49         '均值
                Cells(1, j + 1) = j
            Next
          End If
作者: 准提部林    時間: 2019-6-2 13:59

回復 12# Airman


       .Sheets(1).Name = A  '加這一行
       .SaveAs Filename:=P & "\" & A & ".xls", FileFormat:=xlNormal, CreateBackup:=False
       .Close 0
作者: Airman    時間: 2019-6-2 16:27

本帖最後由 Airman 於 2019-6-2 16:29 編輯

回復 13# Scott090
Scott090大大 :
謝謝您的耐心賜正~
OK了~感恩^^
作者: Airman    時間: 2019-6-2 16:31

回復 14# 准提部林
准大 :
謝謝您的耐心賜教~
OK了~感恩^^
作者: ziv976688    時間: 2019-6-2 18:28

回復 14# 准提部林
准提版主 :
這一題可不可以請你幫我看一下
http://forum.twbts.com/thread-21810-1-1.html
謝謝你 !




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)