博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

VBA 读取替换文本文件内容

Posted on 2015-12-18 14:32  first_start  阅读(1869)  评论(0)    收藏  举报

Private Sub CommandButton1_Click()
  'http://blog.csdn.net/alexbnlee/article/details/6932339
  'http://www.51hei.com/bbs/dpj-24491-1.html
  ReplaceInfo
End Sub

-------------------------------打开文件直接替换-----------------------------------------------------

Sub ReplaceInfo()
  Dim Fn$, MyPath$, MyFile$, NewName$, myText
  Fn = Application.GetOpenFilename("選択一つファイル(*.*), *.*", , "選択一つファイル:")
  MyPath = Left(Fn, InStrRev(Fn, "\"))
  FileInfo = Readbinary(MyPath & "script.sql")
  Open "temp" For Append As #2
  For i = 2 To UsedRange.Rows.Count
    If Cells(i, 3) <> "" Then
      OldName = Cells(i, 3)
      NewName = Cells(i, 8)
    If OldName = NewName Then
    If InStr(NewName, "_TB_") > 0 Then
        OldIndex = Replace(OldName, "_TB_", "_IX_")
        NewIndex = Replace(OldName, "_TB_", "_IX_TB_")
        ElseIf InStr(NewName, "_WK_") > 0 Then
        OldIndex = Replace(OldName, "_WK_", "_IX_")
        NewIndex = Replace(NewName, "_WK_", "_IX_WK_")
    End If
    TOldInd = "CREATE CLUSTERED COLUMNSTORE INDEX [" & OldIndex & "] ON [dbo].[" & OldName & "] WITH (DROP_EXISTING = OFF) ON [PRIMARY]"
    TNewInd = "CREATE CLUSTERED COLUMNSTORE INDEX [" & NewIndex & "] ON [dbo].[" & OldName & "] WITH (DROP_EXISTING = OFF) ON [PRIMARY]"
    If InStr(FileInfo, TOldInd) > 0 Then
      FileInfo = Replace(FileInfo, TOldInd, TNewInd)
    End If
    Else
      OldIndex = Replace(OldName, "_TB_", "_IX_")
      If InStr(NewName, "_TB_") > 0 Then
        NewIndex = Replace(NewName, "_TB_", "_IX_TB_")
      ElseIf InStr(NewName, "_WK_") > 0 Then
        NewIndex = Replace(NewName, "_WK_", "_IX_WK_")
      ElseIf InStr(NewName, "00_") > 0 Then
        NewIndex = Replace(NewName, "00_", "00_IX_")
      End If

    If InStr(FileInfo, OldName) > 0 Then
      FileInfo = Replace(FileInfo, OldName, NewName)
    End If

    If InStr(FileInfo, OldIndex) > 0 Then
      FileInfo = Replace(FileInfo, OldIndex, NewIndex)
    End If
    End If
  End If
  Next
  Print #2, FileInfo
  Close #2
  Name "temp" As "new.sql"
End Sub

Function Readbinary(ByVal FullNames As String) As String
  On Error GoTo errh
  Dim fNum As Integer, Length1 As Long, w1 As String, Isopen As Boolean
  fNum = FreeFile()
  Open FullNames For Binary As #fNum
  Isopen = True
  Length1 = LOF(fNum)
  w1 = Space$(Length1)
  Seek #fNum, 1
  Get #fNum, , w1
  Close
  Readbinary = w1
  errh:
  If Isopen Then Close
  'MsgBox Err.Description
End Function

-------------------------------------单行循环替换--------------------------------------------------
Sub ReplaceText()
  Dim Fn$, MyPath$, MyFile$, NewName$, myText

  Fn = Application.GetOpenFilename("選択一つファイル(*.*), *.*", , "選択一つファイル:")
  MyPath = Left(Fn, InStrRev(Fn, "\"))
  MyFile = Dir(MyPath & "*.sql")

  Open MyFile For Input As #1
  Open MyFile & "temp" For Append As #2
  Do While Not EOF(1)
    DoEvents
    Line Input #1, myText
    For i = 2 To UsedRange.Rows.Count
      If Cells(i, 3) = "" Then
        Exit Sub
      Else
      OldName = Cells(i, 3)
      NewName = Cells(i, 8)
      OldIndex = Replace(OldName, "_TB_", "_IX_")
      If InStr(NewName, "_TB_") > 0 Then
        NewIndex = Replace(NewName, "_TB_", "_IX_TB_")
      ElseIf InStr(NewName, "_WK_") > 0 Then
        NewIndex = Replace(NewName, "_WK_", "_IX_WK_")
      End If

    If InStr(myText, OldName) > 0 Then
      myText = Replace(myText, OldName, NewName)
    End If
    If InStr(myText, OldIndex) > 0 Then
      myText = Replace(myText, OldIndex, NewIndex)
    End If
  End If
  Next
  Print #2, myText
  Loop
  Close #2
  Close #1

  Kill MyFile
  Name MyFile & "temp" As MyFile
End Sub