ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 10140|回复: 10

添加的自动更正保存到哪里去了

[复制链接]

TA的精华主题

TA的得分主题

发表于 2005-6-20 23:11 | 显示全部楼层 |阅读模式
找到一个代码,可以快速将一些符号,加入到自动更正中,但好像是保存在Normal.dot里,但手工添加的好像是保存在mso1033的文件里,折实在回事呢,怎么才能保存到mso1033文件中呢

TA的精华主题

TA的得分主题

发表于 2005-6-21 14:53 | 显示全部楼层
你好能不能将你得到的代码,发出出来啊。

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-6-21 19:06 | 显示全部楼层

Option Explicit

Const StatMsg1 = "自动更正项: "
Const StatMsg2 = " 总共"
Const StatMsg3 = "正在格式化..."
Const StatMsg4 = "正在保存..."
Const TagText = "自动更正文件"
Const szAppName = "自动更正保存与备份"
Const szErrorMsg = "发生错误,请决定是否重试一次?"
Const szACEntriesErrorMsg = "发生错误,可能是文件格式不正确。"
Const szWarnMsg = "即将用备份文件中的自动更正定义项替换现有的自动更正定义项。是否进行替换"
Const szFormatIncorrect = "自动更正备份文件格式有误"
Const szRestoreCompletemsg = "恭喜您,自动更正列表恢复完成。"

' 隐藏当前窗体,创建一个新Word文档,调用GetAutoCorrectEntries()并在文件前部添加"自动更正文件",
' 调用SaveACDoc取得文件名后进行存盘

Private Sub BackupAclList()

    Dim Y As Integer

    Application.ScreenUpdating = False

    Application.Documents.Add
  
    Y = GetAutoCorrectEntries() ' 调用GetAutoCorrectEntries()函数

    With Selection '在表格前添加标题
        .SplitTable
        .TypeText Text:=TagText
        .TypeParagraph
  End With
  
  With ActiveDocument.Sentences(1) '修改标题的格式
    .Bold = True
    .Font.Size = 14
    .ParagraphFormat.Alignment = wdAlignParagraphCenter
  End With

    Application.StatusBar = StatMsg4 ' 保存文件

    If SaveACDoc = True Then ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges

    Application.ScreenUpdating = True

End Sub

' 将自动更正定义项保存到一个文件中,包括数值和是否包含格式
' 名称是定义项的文本输入内容,数值是定义项的替换内容
' 格式项为一个逻辑值,如果它是True则自动更正项为带格式文本
' 然后将内容转换为表格文字并为表格添加标题

Private Function GetAutoCorrectEntries()
    Dim x As Integer
    Dim TotalACEntries As Integer
    
    TotalACEntries = Application.Autocorrect.Entries.Count '取得项目数
    For x = 1 To TotalACEntries
    With Selection
         .TypeText Text:=Application.Autocorrect.Entries.Item(x).Name
         .TypeText vbTab
          
          '检查是否是带格式文本
          If Application.Autocorrect.Entries.Item(x).RichText = True Then
                Application.Autocorrect.Entries(x).Apply Range:=Selection.Range
          Else
                .TypeText Text:=Application.Autocorrect.Entries.Item(x).Value
          End If
          .TypeText vbTab '添加制表位
          .TypeText Text:=Application.Autocorrect.Entries.Item(x).RichText
          .TypeParagraph
    End With
    Application.StatusBar = "保存" & StatMsg1 & x & StatMsg2 & TotalACEntries
Next x


'将内容转换为表格
Application.StatusBar = StatMsg3
Selection.HomeKey Unit:=wdStory, Extend:=wdExtend
Selection.ConvertToTable Separator:=wdSeparateByTabs, NumColumns:=3


' add row heading
With Selection
    .MoveUp Unit:=wdLine, Count:=1
    .InsertRows 1
    .TypeText Text:="替换"
    .MoveRight Unit:=wdCell
    .TypeText Text:="替换为"
    .MoveRight Unit:=wdCell
    .TypeText Text:="带格式文本"
    .HomeKey Unit:=wdStory
End With
    
    
End Function

Public Function SaveACDoc()
    Dim Style, Response As Integer
    Dim Title As String

    SaveACDoc = True
    Err.Clear
    On Error GoTo SaveACDocErrors

With Dialogs(wdDialogFileSaveAs)
    .Name = TagText
    .Show
End With


SaveACDocErrors:
Select Case Err.Number
    Case 0:    ' no error
    Case 4198: ' cancel
      SaveACDoc = False
    Case Else
      Style = vbYesNo + vbCritical + vbDefaultButton2
      Title = Err.Number & "  " & Err.Description
        
      Response = MsgBox(szErrorMsg, Style, Title)
      If Response = vbYes Then
          Resume 'bring up SaveAs again
      Else    ' User choose No.
          SaveACDoc = False
      End If
End Select

End Function
'
' 揭示用户是否进行操作,如果用户回答 NO 则结束程序.
' 若用户确认,则显示打开文件对话框,则用户选择备份文件(通过〖备份〗按钮创建的),并用OpenACDoc()打开文件
' 若成功则调用RestoreACEntries()恢复自动更正项。最后关闭备份文件。
'
Private Sub RestoreAclList()
    Dim ACFileName, Title As String
    Dim Style, Response, x As Integer


    Style = vbYesNo + vbInformation + vbDefaultButton2 ' Define buttons.
    Title = szAppName
    Response = MsgBox(szWarnMsg, Style, Title)
    If Response = vbNo Then GoTo bye:

    With Dialogs(wdDialogFileOpen)
        .Name = "*.doc"
        .Display
        ACFileName = .Name
    End With

    If OpenACDoc(ACFileName) = True Then
        x = RestoreACEntries()
        ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges
    End If

bye:
End Sub

Function RestoreACEntries()
Dim I, NumRows As Integer
Dim oDoc, oACorrect, oTable As Object

Dim szName As String, szValue As String, szRTF As String

Err.Clear
On Error GoTo RestoreACEntriesErrors:

    If ActiveDocument.Words(1) <> "自动更正" Then    '检查文件的合格性
        MsgBox szFormatIncorrect
        Exit Function
    End If

    
    Application.ScreenUpdating = False
        
    Set oDoc = ActiveDocument
    Set oTable = oDoc.Tables(1)
    Set oACorrect = Application.Autocorrect.Entries

    NumRows = ActiveDocument.Tables(1).Rows.Count
    Selection.GoTo What:=wdGoToTable, Which:=wdGoToFirst
    Selection.MoveRight Unit:=wdCell, Count:=3
    
    For I = 2 To NumRows
         szName = Selection.Text
        
         Selection.MoveRight Unit:=wdCell: szValue = Selection.Text
        
         Selection.MoveRight Unit:=wdCell: szRTF = Selection.Text
        
         If szRTF = "False" Then
           Application.StatusBar = "恢复" & StatMsg1 & szName
           oACorrect.Add Name:=szName, Value:=szValue
         Else
           Application.StatusBar = "恢复" & StatMsg1 & szName
                                
           Selection.MoveLeft Unit:=wdCell
           oACorrect.AddRichText szName, Selection.Range
           Selection.MoveRight Unit:=wdCell
         End If
       Selection.MoveRight Unit:=wdCell
    Next I
    
    Application.ScreenUpdating = True
    MsgBox szRestoreCompletemsg
    
    
RestoreACEntriesErrors:
Select Case Err.Number
    Case 0:    ' no error
    Case Else
      MsgBox (szACEntriesErrorMsg & vbCr & Err.Number & "  " & Err.Description & " " & szName)
End Select
    
End Function
Public Function OpenACDoc(ByVal ACFileOpenName As String) As Boolean

    Dim Style As Integer

    OpenACDoc = True
    Err.Clear
    On Error GoTo OpenACDocErrors

    Documents.Open FileName:=ACFileOpenName

OpenACDocErrors:
    If Err.Number <> 0 Then OpenACDoc = False
End Function

Private Sub Document_New()
   Dim Response As Integer, strInfo As String
   strInfo = "你可以用这这个程序备份或恢复自动更正列表。" + vbCrLf + vbCrLf + "〖 是 〗:创建一个保存有自动更正项的Word文档。" + vbCrLf + "〖 否 〗:从您保存的备份Word文档中恢复自动更正列表。" + vbCrLf + "选择〖取消〗则结束程序。" + vbCrLf
ReD
   Response = MsgBox(strInfo, vbQuestion + vbYesNoCancel, "选择功能")
   Select Case Response
    Case vbYes
        BackupAclList
        GoTo ReDO
    Case vbNo
        RestoreAclList
        GoTo ReDO
    Case vbCancel
       ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges
   End Select
End Sub

Private Sub Document_Open()
       'ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges
End Sub

[此贴子已经被konggs于2008-1-27 10:20:43编辑过]

TA的精华主题

TA的得分主题

发表于 2005-6-22 14:22 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

上面的代吗中在倒数第十六行有一个小错误:将“RED” 应更正为“REDO:”整个程序是一个难得的好程序。试用后没有什么问题啊?出找一找守老大对一个贴的回复吧。我我反后你发上来。

[此贴子已经被作者于2005-6-23 13:41:51编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-6-22 19:15 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
但这个代码太长了,有水可以简化一下啊,而且它生成的备份文件是表格格式的,体积比较大。还有就是如何让它导入到mso1033.acl中啊,谢谢个位大虾了

TA的精华主题

TA的得分主题

发表于 2005-6-22 19:25 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

看到代码题,只能犯晕了。

心有余而力不足,就此打住,啃点基础得了。

TA的精华主题

TA的得分主题

发表于 2005-6-23 14:12 | 显示全部楼层

再请参:

'* +++++++++++++++++++++++++++++
'* Created By I Love You_Word!@ExcelHome 2005-3-19 20:47:11
'仅测试于System: Windows NT Word: 10.0 Language: 2052
'^The Code CopyIn [ThisDocument-ThisDocument]^'
'* -----------------------------

'分别将带格式词条和不带格式的词条写到文档中,请自行保存该文档
Sub GetAutoCorrectEntries() '导出
    Dim acEntry As AutoCorrectEntry, Mystring As String, astring As String, Ent As String
    On Error Resume Next
    Application.ScreenUpdating = False '关闭屏幕更新
    For Each acEntry In Application.AutoCorrect.Entries
        With acEntry
            If .RichText = False Then    '如果为不带格式文本
                astring = .Name & vbTab & .Value    '词条名称和更正后的词条
                '如果更正后的词条中有回车符则Ent变量为"",否则为回车符
                If VBA.InStr(astring, Chr(13)) > 0 Then Ent = "" Else Ent = Chr(13)
                Mystring = Mystring & astring & Ent    '在内存中累加
            Else
                '如果为带格式的文本词条,则只插入词条名称(二次)
                Selection.InsertAfter .Name & vbTab & .Name & Chr(13)
            End If
        End With
    Next
    Selection.InsertAfter Mystring '插入累加后的变量
    Application.ScreenUpdating = True
    Call FormatAutoCorrectEntries '运行下一个过程
End Sub
'----------------------
'此代码的目的是将带格式的词条的名称替换为自动更正中的格式与文本,并将
'其名称以红色字体标示出来,以便在下一个过程中区别调用
Sub FormatAutoCorrectEntries()
    Dim i As Paragraph, Mystring() As String, MyRange As Range, x As Integer, TempRange As Range
    On Error Resume Next
    With ActiveDocument
        For Each i In .Paragraphs    '在段落中循环
            '设置一个RANGE 变量为从段落开始到段落标记前一个位置
            Set MyRange = .Range(i.Range.Start, i.Range.End - 1)
            '以TAB键为分隔符生成一个一维数组
            Mystring = VBA.Split(MyRange, vbTab)
            '如果两者相同(即带有格式词条的结果)
            If Mystring(0) = Mystring(1) Then
                x = VBA.InStr(i.Range, vbTab)    '取得TAB键的位置
                '重新定义一个RANGE对象为从TAB键的后一个位置到段落标记前一个位置
                Set TempRange = .Range(i.Range.Start, i.Range.Start + x - 1)
                TempRange.Font.Color = wdColorRed
                Set MyRange = .Range(i.Range.Start + x, i.Range.End - 1)
                '在该位置上应用自动更正
                Application.AutoCorrect.Entries(MyRange.Text).Apply MyRange
                '重新定义RANGE对象,使之为更正后的文本位置
            End If
        Next
    End With
End Sub
'----------------------
'打开带有包含不带格式的词条和带格式的词条的文档(即导出文档),运行此过程
'此过程的目的就是向自动更正中添加词条,如果文档中的词条名为红色字体,即为
'添加带格式的词条,反之则为无格式文本词条,即导入自动更正词条.
Sub SetAutoCorrectEntries() '导入
    Dim i As Paragraph, Mystring() As String, MyRange As Range, x As Integer, TempRange As Range
    On Error Resume Next
    With ActiveDocument
        For Each i In .Paragraphs    '在段落中循环
            '设置一个RANGE 变量为从段落开始到段落标记前一个位置
            Set MyRange = .Range(i.Range.Start, i.Range.End - 1)
            '以TAB键为分隔符生成一个一维数组
            Mystring = VBA.Split(MyRange, vbTab)
            x = VBA.InStr(i.Range, vbTab)    '取得TAB键的位置
            '定义一个在段落开始到TAB键之前的一个RANGE对象
            Set TempRange = .Range(i.Range.Start, i.Range.Start + x - 1)
            '重新定义一个RANGE对象为从TAB键的后一个位置到段落标记前一个位置
            Set MyRange = .Range(i.Range.Start + x, i.Range.End - 1)
            MyRange.Select
            If TempRange.Font.Color = wdColorRed Then    '如果为红色字体
                '添加添加以MyRange样式的文本内容的自动更正词条
                Application.AutoCorrect.Entries.AddRichText Mystring(0), MyRange
            Else
                '添加不带文本格式的自动更正词条
                Application.AutoCorrect.Entries.Add Mystring(0), Mystring(1)
            End If
        Next
    End With
End Sub
'----------------------

注意:导出过程中,只需运行第一个过程(第二个过程由第一个过程自动加载),然后保存导出的文档。

删除所有自动更正条目后(也无所谓),可以覆盖。打开上述文档,运行第三个过程,可以向自动更正词条中添加带格式/无格式的词条。

守老大的。

[此贴子已经被konggs于2008-1-27 10:20:28编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-6-23 18:21 | 显示全部楼层

也是添加到模板中的哈,不是说自动更正是在mso1033中的吗

TA的精华主题

TA的得分主题

发表于 2010-12-16 12:59 | 显示全部楼层
方法一 拷贝配置文件-----plxmm office中创建自动更正的词组保存在哪里? 参见2楼
http://club.excelhome.net/viewth ... p;page=1&extra=
C:\Documents and Settings\[你的登录名]\Application Data\Microsoft\Office下,[你的登录名]为当前系统用户名称。文件名字为:MSO1033(如果实在找不到的话,请修改文件夹选项中的显示系统文件和显示所有隐藏文件后,再用高级搜索此文件名即可。)

其它方法----chuhaiou http://club.excelhome.net/viewthread.php?tid=376687
所有程序 →Microsoft Office →Microsoft Office工具 →Microsoft Office 2003用户设置保存向导 →保存本机设置。

TA的精华主题

TA的得分主题

发表于 2014-9-12 17:06 | 显示全部楼层
自动更正保存到 MSO1033.acl 文件里去了。
它有通用路径:
  1. %AppData%\Microsoft\Office
复制代码

复制这个路径到 Windows 的地址栏,回车即可。
啥地址栏都行,例如:资源管理器的地址栏、开始运行的地址栏、IE浏览器的地址栏……
且这样的路径适用于各种版本的操作系统、各种版本的 Office。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-16 20:11 , Processed in 0.027541 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表