下面分享一下迷宫的全部宏代码,虽然运行速度不快,但是好在可以正常运行。 其中两个function和一个sub是用来调用的。shang、xia、zuo、you四个sub的代码几乎相同,并且都会调用aaranse,用来表示按键操作时,角色向哪个方向移动。migong用来生成新的迷宫地图,要调用两个function,其中ffkaimen用来表示生成迷宫时打开两个单元格之间的通道;ffxinbianjie用来刷新已完成的迷宫边界。kaishi用来表示手动操作角色通过迷宫正式开始了。快捷键能够起作用的前提是,先录制宏,设置好快捷键,然后将这里每一个宏里的代码复制到录制好的对应的宏里面去。 OptionExplicit Subshang() shang宏 快捷键:Ctrlw DimHH1,LL1,ii,jj,Hj1,Lj1AsLong HH1ActiveSheet。UsedRange。Rows。Count LL1ActiveSheet。UsedRange。Columns。Count Hj11 Lj10 Forjj2ToLL1 Forii2ToHH1 IfCells(ii,jj)。Interior。ColorRGB(255,0,255)And Cells(ii,jj)。Borders(xlEdgeTop)。LineStylexlNoneAnd Cells(iiHj1,jjLj1)。Borders(xlEdgeBottom)。LineStylexlNoneThen CallaaRanse(ii,jj,Hj1,Lj1) GoToJieshu EndIf Nextii Nextjj Jieshu: EndSub Subxia() xia宏 快捷键:Ctrls DimHH1,LL1,ii,jj,Hj1,Lj1AsLong HH1ActiveSheet。UsedRange。Rows。Count LL1ActiveSheet。UsedRange。Columns。Count Hj11 Lj10 Forjj2ToLL1 Forii2ToHH1 IfCells(ii,jj)。Interior。ColorRGB(255,0,255)And Cells(ii,jj)。Borders(xlEdgeBottom)。LineStylexlNoneAnd Cells(iiHj1,jjLj1)。Borders(xlEdgeTop)。LineStylexlNoneThen CallaaRanse(ii,jj,Hj1,Lj1) GoToJieshu EndIf Nextii Nextjj Jieshu: EndSub Subzuo() zuo宏 快捷键:Ctrla DimHH1,LL1,ii,jj,Hj1,Lj1AsLong HH1ActiveSheet。UsedRange。Rows。Count LL1ActiveSheet。UsedRange。Columns。Count Hj10 Lj11 Forjj2ToLL1 Forii2ToHH1 IfCells(ii,jj)。Interior。ColorRGB(255,0,255)And Cells(ii,jj)。Borders(xlEdgeLeft)。LineStylexlNoneAnd Cells(iiHj1,jjLj1)。Borders(xlEdgeRight)。LineStylexlNoneThen CallaaRanse(ii,jj,Hj1,Lj1) GoToJieshu EndIf Nextii Nextjj Jieshu: EndSub Subyou() you宏 快捷键:Ctrld DimHH1,LL1,ii,jj,Hj1,Lj1AsLong HH1ActiveSheet。UsedRange。Rows。Count LL1ActiveSheet。UsedRange。Columns。Count Hj10 Lj11 Forjj2ToLL1 Forii2ToHH1 IfCells(ii,jj)。Interior。ColorRGB(255,0,255)And Cells(ii,jj)。Borders(xlEdgeRight)。LineStylexlNoneAnd Cells(iiHj1,jjLj1)。Borders(xlEdgeLeft)。LineStylexlNoneThen CallaaRanse(ii,jj,Hj1,Lj1) GoToJieshu EndIf Nextii Nextjj Jieshu: EndSub Submigong() migong宏 快捷键:Ctrlm Application。ScreenUpdatingFalse屏幕不及时更新 Application。DisplayAlertsFalse警告不显示 OnErrorGoTotuichu出现错误GoTotuichu Cells。Delete Cells。Interior。ColorRGB(190,190,0) Cells。RowHeight14。25 Cells。ColumnWidth1。88 DimHH1,LL1,ii,jj,HH2,LL2,LL0,HH0AsLong DimBianjieAsString DimRnd1,Weizhi1,Hang1,Lie1,Fangxiang1AsLong DimRukou1,Chukou1AsLong Bianjie Bianjie每9位一组,其中234位表示行号,678位表示列号,第9位表示门的方向1下2左3右4上 LL04起始列 HH04起始行 HH124行数 LL144列数 HH2HH1HH01末尾列 LL2LL1LL01末尾列 边框设为0, ForiiHH02ToHH22 ForjjLL02ToLL22 Cells(ii,jj)0 Nextjj Nextii 内部设为2 ForiiHH0ToHH2 ForjjLL0ToLL2 Cells(ii,jj)4 Nextjj Nextii WithRange(Cells(HH0,LL0),Cells(HH2,LL2)) 。Borders。LineStylexlContinuous 。Borders。WeightxlMedium 。Interior。ColorRGB(0,0,0) EndWith 入口设为1 jjInt(Rnd()HH1HH0) Cells(jj,LL01)1 BianjieFFKaimen(jj,LL01,3,Bianjie) Rukou1jj Forii1To999999 IfBianjieThen ExitFor EndIf Rnd1Int(Exp(Log(Rnd())0。3)Len(Bianjie)9) Weizhi1Mid(Bianjie,Rnd191,8) Hang1Val(Mid(Weizhi1,1,4))1000 Lie1Val(Mid(Weizhi1,5,4))1000 Fangxiang1Mid(Bianjie,Rnd199,1) BianjieFFKaimen(Hang1,Lie1,Fangxiang1,Bianjie) BianjieFFXinBianjie(Bianjie) Next 画出口 jjInt(Rnd()HH1HH0) Cells(jj,LL2)。Borders(xlEdgeRight)。LineStylexlNone Chukou1jj Cells。ClearContents Cells(Rukou1,LL01) Cells(Chukou1,LL21) Cells(Rukou1,LL02)。Select Range(Cells(HH02,LL0),Cells(HH02,LL2))。Merge WithCells(HH02,LL0) 。ValueHH1LL1的迷宫 。HorizontalAlignmentxlCenter 。VerticalAlignmentxlCenter 。Font。Size18 。EntireRow。AutoFit EndWith IfLen(Cells(1,1))0Then Cells(1,1) EndIf tuichu: Application。ScreenUpdatingTrue屏幕更新 Application。DisplayAlertsTrue警告显示 EndSub Subkaishi() kaishi宏 快捷键:Ctrlk DimHH1,LL1,Hj1,Lj1,ii,jjAsLong HH1ActiveSheet。UsedRange。Rows。Count LL1ActiveSheet。UsedRange。Columns。Count Hj10 Lj11 Forjj1ToLL1 Forii1ToHH1 IfCells(ii,jj)Then Range(Cells(ii1,jj1),Cells(ii1,jj1))。Interior。ColorRGB(255,255,255) Cells(ii,jj)。Interior。ColorRGB(255,0,255) GoToJixu EndIf Nextii Nextjj Jixu: ForjjLL12ToLL1 Forii1ToHH1 IfCells(ii,jj)Then Cells(ii,jj)。Interior。ColorRGB(255,255,255) GoToJieshu EndIf Nextii Nextjj Jieshu: EndSub FunctionFFXinBianjie(Bianjie) DimFH1,FL1,FH2,FL2,FX1,FX2,ii,jjAsInteger DimBianjie2AsString Bianjie2Bianjie iiLen(Bianjie2)9 DoWhileii0 FH1Val(Mid(Bianjie2,ii98,4))1000 FL1Val(Mid(Bianjie2,ii94,4))1000 FX1Val(Mid(Bianjie2,ii9,1)) FH2FH1 FL2FL1 FX25FX1 IfFX11Then FH2FH11 ElseIfFX12Then FL2FL11 ElseIfFX13Then FL2FL11 ElseIfFX14Then FH2FH11 EndIf jjLen(Bianjie2)91 DoWhilejj0 IfMid(Bianjie2,jj98,9)(1000FH2)(1000FL2)FX2Then Bianjie2Left(Bianjie2,(jj1)9)Mid(Bianjie2,jj91,Len(Bianjie2)) ExitDo EndIf jjjj1 Loop IfCells(FH2,FL2)4Then Bianjie2Left(Bianjie2,(ii1)9)Mid(Bianjie2,ii91,Len(Bianjie2)) EndIf iiii1 Loop FFXinBianjieBianjie2 EndFunction FunctionFFKaimen(Hang,Lie,Fangxiang,Bianjie) DimBianjie2,Shanchu1AsString DimHang2,Lie2,iiAsLong Bianjie2Bianjie Cells(Hang,Lie)Cells(Hang,Lie)1 Shanchu1(1000Hang)(1000Lie)Fangxiang iiLen(Bianjie2)9 ForiiLen(Bianjie2)9To1Step1 IfMid(Bianjie2,ii98,9)Shanchu1Then Bianjie2Left(Bianjie2,(ii1)9)Mid(Bianjie2,ii91,Len(Bianjie2)) EndIf Next Hang2Hang Lie2Lie IfFangxiang1Then Cells(Hang,Lie)。Borders(xlEdgeBottom)。LineStylexlNone Hang2Hang1 ElseIfFangxiang2Then Cells(Hang,Lie)。Borders(xlEdgeLeft)。LineStylexlNone Lie2Lie1 ElseIfFangxiang3Then Cells(Hang,Lie)。Borders(xlEdgeRight)。LineStylexlNone Lie2Lie1 ElseIfFangxiang4Then Cells(Hang,Lie)。Borders(xlEdgeTop)。LineStylexlNone Hang2Hang1 EndIf Cells(Hang2,Lie2)Cells(Hang2,Lie2)1 IfCells(Hang21,Lie2)4Then Bianjie2Bianjie2(1000Hang2)(1000Lie2)1 EndIf IfCells(Hang2,Lie21)4Then Bianjie2Bianjie2(1000Hang2)(1000Lie2)2 EndIf IfCells(Hang2,Lie21)4Then Bianjie2Bianjie2(1000Hang2)(1000Lie2)3 EndIf IfCells(Hang21,Lie2)4Then Bianjie2Bianjie2(1000Hang2)(1000Lie2)4 EndIf FFKaimenBianjie2 EndFunction SubaaRanse(ii,jj,Hj1,Lj1) DimJj1AsInteger IfHj10Then ForJj11To1 IfCells(iiJj1,jj2Lj1)。Interior。ColorRGB(0,0,0)Then Cells(iiJj1,jj2Lj1)。Interior。ColorRGB(255,255,255) EndIf Next ElseIfLj10Then ForJj11To1 IfCells(ii2Hj1,jjJj1)。Interior。ColorRGB(0,0,0)Then Cells(ii2Hj1,jjJj1)。Interior。ColorRGB(255,255,255) EndIf Next EndIf IfCells(iiHj1,jjLj1)。Interior。ColorRGB(255,255,255)Or Cells(iiHj1,jjLj1)。Interior。ColorRGB(190,190,190)Then Cells(ii,jj)。Interior。ColorRGB(0,255,0) Cells(iiHj1,jjLj1)。Interior。ColorRGB(255,0,255) ElseIfCells(iiHj1,jjLj1)。Interior。ColorRGB(0,255,0)Then Cells(ii,jj)。Interior。ColorRGB(190,190,190) Cells(iiHj1,jjLj1)。Interior。ColorRGB(255,0,255) EndIf EndSub 最后分享几个迷宫图片。