Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 将Excel数据保存到.dat文件中,包括非英语单词_Vba_Excel_Excel 2010 - Fatal编程技术网

Vba 将Excel数据保存到.dat文件中,包括非英语单词

Vba 将Excel数据保存到.dat文件中,包括非英语单词,vba,excel,excel-2010,Vba,Excel,Excel 2010,下面的VBA代码用于将Excel数据保存到.dat文件中,适用于英语单词,但不适用于非英语单词 我应该如何修改它来处理非英语单词 Sub Save_Click() Dim FileName As String Dim wks As Worksheet Set wks = ThisWorkbook.Sheets(1) Dim rowRange As Range Dim colRange As Range Dim LastCol As Long

下面的VBA代码用于将Excel数据保存到.dat文件中,适用于英语单词,但不适用于非英语单词

我应该如何修改它来处理非英语单词

Sub Save_Click()
    Dim FileName As String
    Dim wks As Worksheet
    Set wks = ThisWorkbook.Sheets(1)
    Dim rowRange As Range
    Dim colRange As Range
    Dim LastCol As Long
    Dim LastRow As Long
    Dim ColCounter As Integer
    Dim rowCounter As Integer
    Dim metarow As Integer
    Dim mergerow As Integer
    Dim noofmetacolumns As Integer
    Dim j As Integer
    FileName = Application.GetSaveAsFilename
    Open FileName For Output As #1
    LastRow = wks.Cells(wks.Rows.Count, "A").End(xlUp).Row
    Set rowRange = wks.Range("A1:A" & LastRow)
    'Loop through each row
    rowCounter = 0
    metarow = 0
    mergerow = 0
    noofmetacolumns = 0
    For Each rrow In rowRange
    'Find Last column in current row
    metarow = 0
    mergerow = 0
    rowCounter = rowCounter + 1
    LastCol = wks.Cells(rowCounter, wks.Columns.Count).End(xlToLeft).Column
    Set colRange = wks.Range(wks.Cells(rowCounter, 1), wks.Cells(rowCounter, LastCol))
    'Loop through all cells in row up to last col
        ColCounter = 0
        For Each cell In colRange
                'Do something to each cell
                'Debug.Print (cell.Value)
                If ColCounter <> 0 Then
                   Print #1, "|";
                   Print #1, cell.Value;
                Else
                   Print #1, cell.Value;
                End If

                ColCounter = ColCounter + 1

                If ColCounter = 1 Then
                 If cell.Value = "METADATA" Then
                    metarow = 1
                 End If

                If cell.Value = "MERGE" Then
                    mergerow = 1
                 End If
                End If



            Next cell
        If metarow = 1 Then

          noofmetacolumns = ColCounter

        End If

        If mergerow = 1 Then

            For j = ColCounter + 1 To noofmetacolumns
               Print #1, "|";
            Next j

        End If


        Print #1, vbNewLine;
        Next rrow


        Close #1


    MsgBox ("File Saved Successfully")
    End Sub
    Sub ImportFile()
    Dim Filt As String
    Dim Title As String
    Dim FileName As String
    Filt = "HDL Dat Files (*.dat),*.dat"
    Title = "Select a HDL Dat File to Import"
    FileName = Application.GetOpenFilename(FileFilter:=Filt, Title:=Title)
    'Procedure call. | is defined as separator,
    'and data is to be inserted on "Sheet1".
    copyDataFromHDLDatFileToSheet FileName, "|", "Sheet1"
    Sheets(1).Select
End Sub
子保存\u单击()
将文件名设置为字符串
将工作作为工作表
Set wks=ThisWorkbook.Sheets(1)
变暗行范围作为范围
暗淡的颜色范围
暗淡如长
最后一排一样长
作为整数的Dim ColCounter
将行计数器设置为整数
作为整数的Dim图元行
将行设置为整数
Dim NoofMeta列为整数
作为整数的Dim j
FileName=Application.GetSaveAsFilename
打开文件名,输出为#1
LastRow=wks.Cells(wks.Rows.Count,“A”).End(xlUp).Row
设置rowRange=wks.Range(“A1:A”和LastRow)
'循环通过每一行
行计数器=0
metarow=0
合并行=0
noofmetacolumns=0
对于行范围中的每个箭头
'查找当前行中的最后一列
metarow=0
合并行=0
行计数器=行计数器+1
LastCol=wks.Cells(行计数器,wks.Columns.Count).End(xlToLeft).Column
设置colRange=wks.Range(wks.Cells(rowCounter,1),wks.Cells(rowCounter,LastCol))
'循环通过行中的所有单元格直到最后一列
ColCounter=0
对于colRange中的每个单元格
“对每个细胞做点什么
'Debug.Print(cell.Value)
如果计数器为0,则
打印#1,“|”;
打印#1,单元格.Value;
其他的
打印#1,单元格.Value;
如果结束
ColCounter=ColCounter+1
如果ColCounter=1,则
如果cell.Value=“METADATA”,则
metarow=1
如果结束
如果cell.Value=“MERGE”,则
合并行=1
如果结束
如果结束
下一个细胞
如果metarow=1,则
noofmetacolumns=ColCounter
如果结束
如果mergerow=1,则
对于j=ColCounter+1到noofmetacolumns
打印#1,“|”;
下一个j
如果结束
打印#1,vbNewLine;
下一个箭头
关闭#1
MsgBox(“成功保存文件”)
端接头
子导入文件()
作为字符串的Dim Filt
将标题设置为字符串
将文件名设置为字符串
Filt=“HDL Dat文件(*.Dat),*.Dat”
Title=“选择要导入的HDL Dat文件”
FileName=Application.GetOpenFilename(FileFilter:=Filt,Title:=Title)
|定义为分隔符,
,并将数据插入“表1”。
copyDataFromHDLDatFileToSheet文件名“|”和“Sheet1”
第(1)页。选择
端接头
测试此代码

Sub Save_Click()
    Dim FileName As String
    Dim wks As Worksheet
    Dim rngDB As Range
    Set wks = ThisWorkbook.Sheets(1)

    FileName = Application.GetSaveAsFilename
    Set rngDB = wks.UsedRange
    TransToCSV FileName, rngDB

    MsgBox ("File Saved Successfully")
End Sub
Sub TransToCSV(myfile As String, rng As Range)

    Dim vDB, vR() As String, vTxt()
    Dim i As Long, n As Long, j As Integer
    Dim objStream
    Dim strTxt As String

    Set objStream = CreateObject("ADODB.Stream")
    vDB = rng
    For i = 1 To UBound(vDB, 1)
        n = n + 1
        ReDim vR(1 To UBound(vDB, 2))
        For j = 1 To UBound(vDB, 2)
            vR(j) = vDB(i, j)
        Next j
        ReDim Preserve vTxt(1 To n)
        vTxt(n) = Join(vR, "|")
    Next i
    strTxt = Join(vTxt, vbCrLf)
    With objStream
        .Charset = "utf-8"
        .Open
        .WriteText strTxt
        .SaveToFile myfile, 2
        .Close
    End With
    Set objStream = Nothing

End Sub
Sub Cellselect()

    Dim FileName As String
    Dim wks As Worksheet
    Dim rngDB As Range
    Dim r As Long, c As Long

    Set wks = ThisWorkbook.Sheets(1)

    With wks
        r = .Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
        c = .Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
        .Cells(r, c).Select
    End With

End Sub

使用以下代码代替使用Drange

Sub Save_Click()
    Dim FileName As String
    Dim wks As Worksheet
    Dim rngDB As Range
    Dim r As Long, c As Long

    Set wks = ThisWorkbook.Sheets(1)

    With wks
        r = .Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
        c = .Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
        Set rngDB = .Range("a1", .Cells(r, c))
    End With

    FileName = Application.GetSaveAsFilename

    TransToCSV FileName, rngDB

    MsgBox ("File Saved Successfully")
End Sub
我想你的床单上没有空的单元格。 测试此代码

Sub Save_Click()
    Dim FileName As String
    Dim wks As Worksheet
    Dim rngDB As Range
    Set wks = ThisWorkbook.Sheets(1)

    FileName = Application.GetSaveAsFilename
    Set rngDB = wks.UsedRange
    TransToCSV FileName, rngDB

    MsgBox ("File Saved Successfully")
End Sub
Sub TransToCSV(myfile As String, rng As Range)

    Dim vDB, vR() As String, vTxt()
    Dim i As Long, n As Long, j As Integer
    Dim objStream
    Dim strTxt As String

    Set objStream = CreateObject("ADODB.Stream")
    vDB = rng
    For i = 1 To UBound(vDB, 1)
        n = n + 1
        ReDim vR(1 To UBound(vDB, 2))
        For j = 1 To UBound(vDB, 2)
            vR(j) = vDB(i, j)
        Next j
        ReDim Preserve vTxt(1 To n)
        vTxt(n) = Join(vR, "|")
    Next i
    strTxt = Join(vTxt, vbCrLf)
    With objStream
        .Charset = "utf-8"
        .Open
        .WriteText strTxt
        .SaveToFile myfile, 2
        .Close
    End With
    Set objStream = Nothing

End Sub
Sub Cellselect()

    Dim FileName As String
    Dim wks As Worksheet
    Dim rngDB As Range
    Dim r As Long, c As Long

    Set wks = ThisWorkbook.Sheets(1)

    With wks
        r = .Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
        c = .Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
        .Cells(r, c).Select
    End With

End Sub

适用于英语单词,但不适用于非英语单词-你的意思是什么?你应该更具体,提供更多关于你的问题的细节。你正在写一个文本文件。你可能想看到非英语的意思,如阿拉伯语或汉语..编写了此代码,用于将excel工作表数据转换为.dat文件fomat..如果效果不好,请改为“utf-8”,改为“unicode”。Hello@Dy.Lee你的解决方案对我很有帮助,但你能帮我解决一个问题吗“即使在行值结束后,它仍在放置”|“什么是不需要的?你能帮我吗?谢谢你advance@maheshgujar:我添加了一些代码。你的情况是因为Usedrange的信息不准确。它再次对大数据做了同样的处理,添加了额外的“|”。@Dy.LeeMERGE | PersonName | PERSON | u NAME | I | 2013/12/07 | | | | | | | | | | | | | | | |像这样