在满足条件时创建单元格后命名的新文本文件

时间:2015-12-17 15:35:27

标签: excel vba excel-vba for-loop

到目前为止,我已经看过并找到了一些帮助,但我正在为我想要制作的Excel宏的每个逻辑而努力。

基本上我有4列数据。列A具有某些名称,列D具有TRUE或FALSE。

我想将一个宏连接到一个按钮,该按钮在以Col A内容命名的给定目录中创建一个新文本文件,但前提是该行中的Col D标记为“TRUE”。

例如,如果我有以下内容。

ColA =测试ColD = TRUE

ColA = Test2 ColD = FALSE

ColA = Test3 ColD = TRUE

我将得到2个文本文件,带有Test.txt和Test3.txt。

我知道我需要为每个循环查看a1-d的范围(无论数字是什么),然后当D = True时,我想要一个SaveAs吗?

这是我到目前为止的代码(是的,我知道这是非常不完整的,但这是我的逻辑在撞墙之前得到的)。

Dim fileName As String
Dim filePath As String
Dim curCell As Object
Dim hideRange As Range

filePath = "C:\ExcelTest\"
hideRange = Range("D1:D1048576")
fileName = *Content of Cell A from this Row*

For Each Row In Range("A1:D1048576")
    IF curCell.value In Range hideRange = "TRUE"
      Then curCell.SaveAs fileName & ".txt, xlTextWindows

任何帮助甚至指向正确的方向都会很棒。我搜索了一些例子,找不到任何与我想做的事情相符的事情。

2 个答案:

答案 0 :(得分:1)

你非常接近,但你在那里循环了很多细胞。

以下是循环行的代码,它停在列中最后一个填充的单元格中。

Sub LoopRows()

dim sht as worksheet
set sht = Thisworkbook.Sheets("Name of Worksheet")

'loop from row 1 to the last row containing data
For i = 1 To sht.Range("A:A").End(xlDown).Row
    'check the value in column 4 for this row (i)
    If sht.Cells(i, 4).Text = "TRUE" Then
        CreateFile sht.Cells(i, 1).Value
    End If
Next i

End Sub

为了编写文件,为了简单起见,它将引用Microsoft脚本运行时并按如下方式执行:

Sub CreateFile(FileName As String)
    Dim fso As New FileSystemObject
    fso.CreateTextFile "c:\temp\" & FileName & ".txt", True
End Sub

修改 我无法理解你为什么没有创建文件,我的测试在Windows机器上运行正常。

请您单独在一个按钮中尝试以下代码,看看它是否打开了文本文件?

Dim fso As New FileSystemObject
fso.CreateTextFile "c:\temp\testfso.txt"
Shell "C:\WINDOWS\notepad.exe c:\temp\testfso.txt", vbMaximizedFocus

编辑2

试试这个,看它是否打开文本文件..

Sub CreateFile(FileName As String)
    Dim fso As New FileSystemObject
    Dim fName as String
    fName = "c:\temp\" & FileName & ".txt"
    fso.CreateTextFile fName, True
    Shell "C:\WINDOWS\notepad.exe " & fName, vbMaximizedFocus
End Sub

答案 1 :(得分:0)

您正在寻找的是这样的:

Sub test()
  Dim filePath As String
  filePath = "C:\ExcelTest\"

  Dim xRow As Variant
  For Each xRow In Range("A1:D100").Rows
    If xRow(1, 4).Value = "TRUE" Then

      Open filePath & xRow(1, 1) & ".txt" For Output As #1
      Write #1, xRow(1, 2), xRow(1, 3)
      Close #1

    End If
  Next
End Sub

虽然它没有错误,但我现在不会使用它 如果您有任何疑问,请询问。

修改

我已经运行了一些测试并注意到Windows阻止我在特定文件夹中创建文件...请尝试将其作为新子并运行它:

Sub testForText()
  Open Environ("AppData") & "\Testing.txt" For Output As #1
  Write #1, "dada"
  Close #1
  Shell "notepad.exe " & Environ("AppData") & "\Testing.txt", vbNormalFocus
End Sub

然后告诉我记事本是否打开" Testing.txt"